/**
 * @class
 * @memberof ScLibs.ui
 * @desc 캘린더를 생성한다.
 * @property {jQuery} el jquery 오브젝트
 * @property {String} format 포맷 문자열을 지정한다. 기본값 : 'mm/dd/yyyy'
 * @property {Number} weekStart 한주의 시작요일을 지정한다. 0 ~ 6 을 지정. 기본값 : 0
 * @property {String} viewMode 화면 모드를 설정한다. 'days' or 'months' or 'years'. 기본값 : 'days'
 * @property {String} minViewMode 작은 화면 모드를 설정한다. 'days' or 'months' or 'years'. 기본값 : 'days'
 * @example
 * var cal = new ScLibs.ui.Calendar($("#cal"), {
 *		format:	'mm/dd/yyyy',
 *		weekStart:	0,
 *		viewMode: 'days',
 *		minViewMode: 'days'
 * });
 * cal.on("change", function(cal, ev){ });
 */
ScLibs.ui.Calendar = ScLibs.extend(ScLibs.Observer, {
	initialize: function(el, config){
		this.config = {
			autoRender: true,
			format:	'mm/dd/yyyy',
			weekStart:	0,
			viewMode: 'days',
			minViewMode: 'days'
		};

		this.config = $.extend(this.config, config);
		
		var listener = { };
		if(this.config.listener){
			listener = this.config.listener;
		}
		ScLibs.ui.Calendar.base.initialize.call(this, this.listener);

		this.el = el;
		if(this.config.autoRender){
			this.render();
		}
	},
	render: function(){
		this.el.datepicker(this.config)
			.on("changeDate", $.proxy(this.changeEvent, this))
			.on("show", $.proxy(this.showEvent, this))
			.on("hide", $.proxy(this.hideEvent, this))
	},
	/**
	 * @method
	 * @memberof ScLibs.ui.Calendar.prototype
	 * @return {String} date 
	 * @desc 선택된 날짜를 반환한다.
	 */
	getDate: function(){
		return this.el.data("date");
	},
	/**
	 * @method
	 * @memberof ScLibs.ui.Calendar.prototype
	 * @param {String} date 
	 * @desc 새로운 날짜를 달력에 표시한다.
	 */
	setDate: function(date){
		this.el.datepicker("setValue", date);
	},
	/**
	 * @method
	 * @memberof ScLibs.ui.Calendar.prototype
	 * @desc 달력을 화면에 표시한다.
	 */
	show: function(){
		this.el.datepicker("show");
	},
	/**
	 * @method
	 * @memberof ScLibs.ui.Calendar.prototype
	 * @desc 달력을 화면에서 감춘다.
	 */
	hide: function(){
		this.el.datepicker("hide");
	},
	changeEvent: function(ev){
		this.fireEvent(this, 'change', [this, ev]);
	},
	showEvent: function(ev){
		this.fireEvent(this, 'show', [this, ev]);
	},
	hideEvent: function(ev){
		this.fireEvent(this, 'hide', [this, ev]);
	}
});

/*
ScLibs.ui.Calendar = function(el, config){
	return el.datepicker(config);	
};
*/